package GUI;

import java.util.ArrayList;
import java.util.Scanner;

import ClassesBasicas.Consulta;
import ClassesBasicas.Exames;
import ClassesBasicas.Funcionario;
import ClassesBasicas.ITipoPessoa;
import ClassesBasicas.Laboratorio;
import ClassesBasicas.LaboratorioConveniado;
import ClassesBasicas.LaboratorioInterno;
import Excecao.AgendaExistenteException;
import Excecao.AgendaInexistenteException;
import Excecao.ConsultaInexistenteException;
import Excecao.ExameExistenteException;
import Excecao.ExameInexistenteException;
import Excecao.LaboratorioExistenteException;
import Excecao.LaboratorioInexistenteException;
import Excecao.PessoaInexistenteException;
import Negocio.Fachada;

public class MenuLaboratorio implements ITipoPessoa{
	public static void telaLaboratorioExame() throws AgendaExistenteException, PessoaInexistenteException, AgendaInexistenteException, LaboratorioInexistenteException, ExameInexistenteException, NumberFormatException, ConsultaInexistenteException{
		Scanner opcao = new Scanner(System.in);
		int op;
		do {
			System.out.println("                                             __________________________________________________________");
			System.out.println("");
			System.out.println("                                                        # SISTEMA DE PRONTUARIO ELETRONICO #");
			System.out.println("                                             __________________________________________________________");
			System.out.println("");
			System.out.println("");
			System.out.println("                                                             MENU CADASTRO LABORATORIO");
			System.out.println("");
			System.out.println("                                                      Laboratorios.............................1");
			System.out.println("                                                      Exames...................................2");
			System.out.println("                                                      Voltar...................................0");
			System.out.println("");
			System.out.print("                                                     > Selecione sua opcao:");
			op = opcao.nextInt();
			if (op ==1){
				telaLaboratorio();
			}else if (op == 2){
				telaExames();
			}else{
				System.out.println("                                                   Opcao Invalida! Favor Digitar Novamente.");
			}
		}while (op!=0);
	}

	public static void telaExames() throws AgendaExistenteException, PessoaInexistenteException, AgendaInexistenteException, LaboratorioInexistenteException, ExameInexistenteException, NumberFormatException, ConsultaInexistenteException{
		Scanner opcao = new Scanner(System.in);
		int op;
		do {
			System.out.println("                                             __________________________________________________________");
			System.out.println("");
			System.out.println("                                                        # SISTEMA DE PRONTUARIO ELETRONICO #");
			System.out.println("                                             __________________________________________________________");
			System.out.println("");
			System.out.println("");
			System.out.println("                                                              MENU CADASTRO EXAMES");
			System.out.println("");
			System.out.println("                                                      Inserir.................................1");
			System.out.println("                                                      Remover.................................2");
			System.out.println("");
			System.out.print("                                                     > Selecione sua opcao:");
			op = opcao.nextInt();
			if (op ==1){
				telaInserirExame();
			}else if (op == 2){
				telaRemoverExame();
			}else{
				System.out.println("                                                   Opcao Invalida! Favor Digitar Novamente.");
			}
		}while (op!=0);
	}

	public static void telaInserirExame() throws NumberFormatException, ConsultaInexistenteException{
		Scanner opcao = new Scanner(System.in);
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("                                                        # SISTEMA DE PRONTUARIO ELETRONICO #");
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("");
		System.out.println("                                                                      INSERIR");
		System.out.println("");
		System.out.print("                                                            Descricao:");
		String descricao = opcao.nextLine();
		System.out.print("                                                            Cod. da Consulta Referente:");
		String codigo = opcao.nextLine();
		Fachada f1 = Fachada.obterInstancia(); 
		Consulta consulta =f1.procurarConsulta(Integer.parseInt(codigo));
		Exames exame = new Exames(descricao, consulta);
		try {
			f1.cadastrarExame(exame);
			System.out.println("Exame Inserido com Sucesso!");

		}catch (ExameExistenteException ex) {
			System.err.println(ex);
		}
	}

	public static void telaLaboratorio() throws AgendaExistenteException, PessoaInexistenteException, AgendaInexistenteException, LaboratorioInexistenteException{
		Scanner opcao = new Scanner(System.in);
		int op;
		do {
			System.out.println("                                             __________________________________________________________");
			System.out.println("");
			System.out.println("                                                        # SISTEMA DE PRONTUARIO ELETRONICO #");
			System.out.println("                                             __________________________________________________________");
			System.out.println("");
			System.out.println("");
			System.out.println("                                                            MENU CADASTRO LABORATORIO");
			System.out.println("");
			System.out.println("                                                      Inserir..................................1");
			System.out.println("                                                      Remover..................................2");
			System.out.println("                                                      Consultar................................3");
			System.out.println("                                                      Alterar..................................4");
			System.out.println("                                                      Voltar...................................0");
			System.out.println("");
			System.out.println("");
			System.out.print("                                                     > Selecione sua opcao:");
			op = opcao.nextInt();
			if (op ==1){
				inserirLaboratorio();
			}else if (op == 2){
				excluirLaboratorio();
			}else if (op ==3){
				consultarLaboratorio();
			}else if (op ==4){
				atualizarLaboratorio();
			}else{
				System.out.println("                                                   Opcao Invalida! Favor Digitar Novamente.");
			}
		}while (op!=0);
	}

	public static void telaRemoverExame() throws ExameInexistenteException{
		Scanner opcao = new Scanner(System.in);
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("                                                        # SISTEMA DE PRONTUARIO ELETRONICO #");
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("");
		System.out.println("                                                                        EXCLUIR");
		System.out.print("");
		System.out.println("                                                            Digite o codigo referente:");
		String cod = opcao.nextLine();
		Fachada f1 = Fachada.obterInstancia();
		f1.removerExame(Integer.parseInt(cod));
		System.out.println("Exame removido com sucesso!");
	}

	@SuppressWarnings("unchecked")
	public static void inserirLaboratorio() throws PessoaInexistenteException{
		Scanner opcao = new Scanner(System.in);
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("                                                        # SISTEMA DE PRONTUARIO ELETRONICO #");
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("");
		System.out.println("                                                                      INSERIR");
		System.out.println("");
		System.out.print("                                                            Nome:");
		String nome = opcao.nextLine();
		System.out.print("                                                            Laboratorio Interno(S/N)?");
		String tipoLab = opcao.nextLine();
		Laboratorio lab=null;
		Fachada f1 =null;
		if(tipoLab.equals("s"))
		{
			System.out.print("                                                            Matricula do Laboratorio:");
			String codAtend = opcao.nextLine();
			f1 = Fachada.obterInstancia(); 
			Funcionario func = (Funcionario) f1.procurar(codAtend, ATENDENTE);
			lab = new LaboratorioInterno(nome, func,new ArrayList(0));
		}
		else{
			f1 = Fachada.obterInstancia(); 
			lab = new LaboratorioConveniado(nome,new ArrayList(0));
		}

		try {
			f1.cadastrar(lab);
			System.out.println("Laboratorio Inserido com Sucesso!");

		}catch (LaboratorioExistenteException ex) {
			System.err.println(ex);
		}
	}

	public static void excluirLaboratorio() throws LaboratorioInexistenteException{
		Scanner opcao = new Scanner(System.in);
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("                                                        # SISTEMA DE PRONTUARIO ELETRONICO #");
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("");
		System.out.println("                                                                        EXCLUIR");
		System.out.print("");
		System.out.println("                                                            Digite o codigo referente:");
		String cod = opcao.nextLine();
		Fachada f1 = Fachada.obterInstancia();
		f1.removerLab(Integer.parseInt(cod));
		System.out.println("Laboratorio removido com sucesso!");
	}


	public static void consultarLaboratorio(){
		Scanner opcao = new Scanner(System.in);
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("                                                        # SISTEMA DE PRONTUARIO ELETRONICO #");
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("");
		System.out.println("                                                                     CONSULTAR");
		System.out.println("");
		System.out.print("                                                            Digite o codigo referente:");
		String cod = opcao.nextLine();

		try {
			Laboratorio lab = (Laboratorio) Fachada.obterInstancia().procurarLab(Integer.parseInt(cod));

			System.out.print("                                                            Nome:");
			System.out.println(lab.getNome());
			System.out.print("                                                            Codigo:");
			System.out.println(lab.getCodigo());
			System.out.print("                                                            Qtd de Exames:");
			System.out.println(lab.getExames().size());

		} catch (LaboratorioInexistenteException e) {
			System.err.println(e);
		}
	}

	@SuppressWarnings({ "unchecked" })
	public static void atualizarLaboratorio() throws LaboratorioInexistenteException, PessoaInexistenteException{
		Scanner opcao = new Scanner(System.in);
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("                                                        # SISTEMA DE PRONTUARIO ELETRONICO #");
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("");
		System.out.println("                                                                      INSERIR");
		System.out.println("");
		System.out.print("                                                            Nome:");
		String nome = opcao.nextLine();
		System.out.print("                                                            Laboratorio Interno(S/N)?:");
		String tipoLab = opcao.nextLine();
		Fachada f1 = Fachada.obterInstancia(); 
		Laboratorio lab=null;
		if(tipoLab.equals("s"))
		{
			System.out.print("                                                            Matricula do Laboratorio:");
			String codAtend = opcao.nextLine();
			Funcionario func = (Funcionario) f1.procurar(codAtend, ATENDENTE);
			lab = new LaboratorioInterno(nome, func,new ArrayList(0));
		}
		else{
			lab = new LaboratorioConveniado(nome,new ArrayList(0));
		}try {

			f1.atualizar(lab);
			System.out.println("Laboratorio Inserido com Sucesso!");

		}catch (LaboratorioInexistenteException ex) {
			System.err.println(ex);
		}
	}
}


